home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60src.lha / Vim / vim60 / src / keymap.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-08-04  |  14.7 KB  |  464 lines

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved    by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. /*
  10.  * For MSDOS some keys produce codes larger than 0xff. They are split into two
  11.  * chars, the first one is K_NUL (same value used in term.h).
  12.  */
  13. #define K_NUL            (0xce)    /* for MSDOS: special key follows */
  14.  
  15. /*
  16.  * Keycode definitions for special keys.
  17.  *
  18.  * Any special key code sequences are replaced by these codes.
  19.  */
  20.  
  21. /*
  22.  * K_SPECIAL is the first byte of a special key code and is always followed by
  23.  * two bytes.
  24.  * The second byte can have any value. ASCII is used for normal termcap
  25.  * entries, 0x80 and higher for special keys, see below.
  26.  * The third byte is guaranteed to be between 0x02 and 0x7f.
  27.  */
  28.  
  29. #define K_SPECIAL        (0x80)
  30.  
  31. /*
  32.  * Positive characters are "normal" characters.
  33.  * Characters 0x0100 - 0x01ff are sometimes used for abbreviations.
  34.  * Negative characters are special key codes.  Only characters below -0x200
  35.  * are used to so that the absolute value can't be mistaken for a single-byte
  36.  * character.
  37.  */
  38. #define IS_SPECIAL(c)        ((c) < 0)
  39. #define IS_ABBR(c)        ((c) >= 0x100 && (c) < 0x200)
  40. #define ABBR_OFF        0x100
  41.  
  42. /*
  43.  * NUL cannot be in the input string, therefore it is replaced by
  44.  *    K_SPECIAL   KS_ZERO    KE_FILLER
  45.  */
  46. #define KS_ZERO            255
  47.  
  48. /*
  49.  * K_SPECIAL cannot be in the input string, therefore it is replaced by
  50.  *    K_SPECIAL   KS_SPECIAL    KE_FILLER
  51.  */
  52. #define KS_SPECIAL        254
  53.  
  54. /*
  55.  * KS_EXTRA is used for keys that have no termcap name
  56.  *    K_SPECIAL   KS_EXTRA    KE_xxx
  57.  */
  58. #define KS_EXTRA        253
  59.  
  60. /*
  61.  * KS_MODIFIER is used when a modifier is given for a (special) key
  62.  *    K_SPECIAL   KS_MODIFIER    bitmask
  63.  */
  64. #define KS_MODIFIER        252
  65.  
  66. /*
  67.  * These are used for the GUI
  68.  *    K_SPECIAL   KS_xxx    KE_FILLER
  69.  */
  70. #define KS_MOUSE        251
  71. #define KS_MENU            250
  72. #define KS_VER_SCROLLBAR    249
  73. #define KS_HOR_SCROLLBAR    248
  74.  
  75. /*
  76.  * These are used for DEC mouse
  77.  */
  78. #define KS_NETTERM_MOUSE    247
  79. #define KS_DEC_MOUSE        246
  80.  
  81. /*
  82.  * Used for switching Select mode back on after a mapping or menu.
  83.  */
  84. #define KS_SELECT        245
  85. #define K_SELECT_STRING        (char_u *)"\200\365X"
  86.  
  87. /*
  88.  * Used for tearing off a menu.
  89.  */
  90. #define KS_TEAROFF        244
  91.  
  92. /* used for JSB term mouse */
  93. #define KS_JSBTERM_MOUSE    243
  94.  
  95. /* used a termcap entry that produces a normal character */
  96. #define KS_KEY            242
  97.  
  98. /* Used for the qnx pterm mouse */
  99. #define KS_PTERM_MOUSE        241
  100.  
  101. /*
  102.  * Filler used after KS_SPECIAL and others
  103.  */
  104. #define KE_FILLER        ('X')
  105.  
  106. /*
  107.  * translation of three byte code "K_SPECIAL a b" into int "K_xxx" and back
  108.  */
  109. #define TERMCAP2KEY(a, b)    (-((a) + ((int)(b) << 8)))
  110. #define KEY2TERMCAP0(x)        ((-(x)) & 0xff)
  111. #define KEY2TERMCAP1(x)        (((unsigned)(-(x)) >> 8) & 0xff)
  112.  
  113. /*
  114.  * get second or third byte when translating special key code into three bytes
  115.  */
  116. #define K_SECOND(c)    ((c) == K_SPECIAL ? KS_SPECIAL : (c) == NUL ? KS_ZERO : KEY2TERMCAP0(c))
  117.  
  118. #define K_THIRD(c)    (((c) == K_SPECIAL || (c) == NUL) ? KE_FILLER : KEY2TERMCAP1(c))
  119.  
  120. /*
  121.  * get single int code from second byte after K_SPECIAL
  122.  */
  123. #define TO_SPECIAL(a, b)    ((a) == KS_SPECIAL ? K_SPECIAL : (a) == KS_ZERO ? K_ZERO : TERMCAP2KEY(a, b))
  124.  
  125. /*
  126.  * Codes for keys that do not have a termcap name.
  127.  *
  128.  * K_SPECIAL KS_EXTRA KE_xxx
  129.  */
  130. enum key_extra
  131. {
  132.     KE_NAME = 3        /* name of this terminal entry */
  133.  
  134.     , KE_S_UP        /* shift-up */
  135.     , KE_S_DOWN        /* shift-down */
  136.  
  137.     , KE_S_F1        /* shifted function keys */
  138.     , KE_S_F2
  139.     , KE_S_F3
  140.     , KE_S_F4
  141.     , KE_S_F5
  142.     , KE_S_F6
  143.     , KE_S_F7
  144.     , KE_S_F8
  145.     , KE_S_F9
  146.     , KE_S_F10
  147.  
  148.     , KE_S_F11
  149.     , KE_S_F12
  150.     , KE_S_F13
  151.     , KE_S_F14
  152.     , KE_S_F15
  153.     , KE_S_F16
  154.     , KE_S_F17
  155.     , KE_S_F18
  156.     , KE_S_F19
  157.     , KE_S_F20
  158.  
  159.     , KE_S_F21
  160.     , KE_S_F22
  161.     , KE_S_F23
  162.     , KE_S_F24
  163.     , KE_S_F25
  164.     , KE_S_F26
  165.     , KE_S_F27
  166.     , KE_S_F28
  167.     , KE_S_F29
  168.     , KE_S_F30
  169.  
  170.     , KE_S_F31
  171.     , KE_S_F32
  172.     , KE_S_F33
  173.     , KE_S_F34
  174.     , KE_S_F35
  175.     , KE_S_F36
  176.     , KE_S_F37
  177.  
  178.     , KE_MOUSE        /* mouse event start */
  179.  
  180. /*
  181.  * Symbols for pseudo keys which are translated from the real key symbols
  182.  * above.
  183.  */
  184.     , KE_LEFTMOUSE    /* Left mouse button click */
  185.     , KE_LEFTDRAG    /* Drag with left mouse button down */
  186.     , KE_LEFTRELEASE    /* Left mouse button release */
  187.     , KE_MIDDLEMOUSE    /* Middle mouse button click */
  188.     , KE_MIDDLEDRAG    /* Drag with middle mouse button down */
  189.     , KE_MIDDLERELEASE    /* Middle mouse button release */
  190.     , KE_RIGHTMOUSE    /* Right mouse button click */
  191.     , KE_RIGHTDRAG    /* Drag with right mouse button down */
  192.     , KE_RIGHTRELEASE    /* Right mouse button release */
  193.  
  194.     , KE_IGNORE        /* Ignored mouse drag/release */
  195.  
  196.     , KE_TAB        /* unshifted TAB key */
  197.     , KE_S_TAB        /* shifted TAB key */
  198.  
  199.     , KE_SNIFF        /* SNiFF+ input waiting */
  200.  
  201.     , KE_XF1        /* extra vt100 function keys for xterm */
  202.     , KE_XF2
  203.     , KE_XF3
  204.     , KE_XF4
  205.     , KE_XEND        /* extra (vt100) end key for xterm */
  206.     , KE_XHOME        /* extra (vt100) home key for xterm */
  207.  
  208.     , KE_LEFTMOUSE_NM    /* non-mappable Left mouse button click */
  209.     , KE_LEFTRELEASE_NM    /* non-mappable left mouse button release */
  210.  
  211.     , KE_S_XF1        /* extra vt100 shifted function keys for xterm */
  212.     , KE_S_XF2
  213.     , KE_S_XF3
  214.     , KE_S_XF4
  215.  
  216.     , KE_MOUSEDOWN    /* scroll wheel pseudo-button Down */
  217.     , KE_MOUSEUP        /* scroll wheel pseudo-button Up */
  218.  
  219.     , KE_KINS        /* keypad Insert key */
  220.     , KE_KDEL        /* keypad Delete key */
  221.  
  222.     , KE_CSI        /* CSI typed directly */
  223.     , KE_SNR        /* <SNR> */
  224.     , KE_PLUG        /* <Plug> */
  225.     , KE_CMDWIN        /* open command-line window from Command-line Mode */
  226.  
  227.     , KE_C_LEFT        /* control-left */
  228.     , KE_C_RIGHT    /* control-right */
  229.     , KE_C_HOME        /* control-home */
  230.     , KE_C_END        /* control-end */
  231. };
  232.  
  233. /*
  234.  * the three byte codes are replaced with the following int when using vgetc()
  235.  */
  236. #define K_ZERO        TERMCAP2KEY(KS_ZERO, KE_FILLER)
  237.  
  238. #define K_UP        TERMCAP2KEY('k', 'u')
  239. #define K_DOWN        TERMCAP2KEY('k', 'd')
  240. #define K_LEFT        TERMCAP2KEY('k', 'l')
  241. #define K_RIGHT        TERMCAP2KEY('k', 'r')
  242. #define K_S_UP        TERMCAP2KEY(KS_EXTRA, KE_S_UP)
  243. #define K_S_DOWN    TERMCAP2KEY(KS_EXTRA, KE_S_DOWN)
  244. #define K_S_LEFT    TERMCAP2KEY('#', '4')
  245. #define K_C_LEFT    TERMCAP2KEY(KS_EXTRA, KE_C_LEFT)
  246. #define K_S_RIGHT    TERMCAP2KEY('%', 'i')
  247. #define K_C_RIGHT    TERMCAP2KEY(KS_EXTRA, KE_C_RIGHT)
  248. #define K_S_HOME    TERMCAP2KEY('#', '2')
  249. #define K_C_HOME    TERMCAP2KEY(KS_EXTRA, KE_C_HOME)
  250. #define K_S_END        TERMCAP2KEY('*', '7')
  251. #define K_C_END        TERMCAP2KEY(KS_EXTRA, KE_C_END)
  252. #define K_TAB        TERMCAP2KEY(KS_EXTRA, KE_TAB)
  253. #define K_S_TAB        TERMCAP2KEY(KS_EXTRA, KE_S_TAB)
  254.  
  255. /* extra set of function keys F1-F4, for vt100 compatible xterm */
  256. #define K_XF1        TERMCAP2KEY(KS_EXTRA, KE_XF1)
  257. #define K_XF2        TERMCAP2KEY(KS_EXTRA, KE_XF2)
  258. #define K_XF3        TERMCAP2KEY(KS_EXTRA, KE_XF3)
  259. #define K_XF4        TERMCAP2KEY(KS_EXTRA, KE_XF4)
  260.  
  261. #define K_F1        TERMCAP2KEY('k', '1')    /* function keys */
  262. #define K_F2        TERMCAP2KEY('k', '2')
  263. #define K_F3        TERMCAP2KEY('k', '3')
  264. #define K_F4        TERMCAP2KEY('k', '4')
  265. #define K_F5        TERMCAP2KEY('k', '5')
  266. #define K_F6        TERMCAP2KEY('k', '6')
  267. #define K_F7        TERMCAP2KEY('k', '7')
  268. #define K_F8        TERMCAP2KEY('k', '8')
  269. #define K_F9        TERMCAP2KEY('k', '9')
  270. #define K_F10        TERMCAP2KEY('k', ';')
  271.  
  272. #define K_F11        TERMCAP2KEY('F', '1')
  273. #define K_F12        TERMCAP2KEY('F', '2')
  274. #define K_F13        TERMCAP2KEY('F', '3')
  275. #define K_F14        TERMCAP2KEY('F', '4')
  276. #define K_F15        TERMCAP2KEY('F', '5')
  277. #define K_F16        TERMCAP2KEY('F', '6')
  278. #define K_F17        TERMCAP2KEY('F', '7')
  279. #define K_F18        TERMCAP2KEY('F', '8')
  280. #define K_F19        TERMCAP2KEY('F', '9')
  281. #define K_F20        TERMCAP2KEY('F', 'A')
  282.  
  283. #define K_F21        TERMCAP2KEY('F', 'B')
  284. #define K_F22        TERMCAP2KEY('F', 'C')
  285. #define K_F23        TERMCAP2KEY('F', 'D')
  286. #define K_F24        TERMCAP2KEY('F', 'E')
  287. #define K_F25        TERMCAP2KEY('F', 'F')
  288. #define K_F26        TERMCAP2KEY('F', 'G')
  289. #define K_F27        TERMCAP2KEY('F', 'H')
  290. #define K_F28        TERMCAP2KEY('F', 'I')
  291. #define K_F29        TERMCAP2KEY('F', 'J')
  292. #define K_F30        TERMCAP2KEY('F', 'K')
  293.  
  294. #define K_F31        TERMCAP2KEY('F', 'L')
  295. #define K_F32        TERMCAP2KEY('F', 'M')
  296. #define K_F33        TERMCAP2KEY('F', 'N')
  297. #define K_F34        TERMCAP2KEY('F', 'O')
  298. #define K_F35        TERMCAP2KEY('F', 'P')
  299. #define K_F36        TERMCAP2KEY('F', 'Q')
  300. #define K_F37        TERMCAP2KEY('F', 'R')
  301.  
  302. /* extra set of shifted function keys F1-F4, for vt100 compatible xterm */
  303. #define K_S_XF1        TERMCAP2KEY(KS_EXTRA, KE_S_XF1)
  304. #define K_S_XF2        TERMCAP2KEY(KS_EXTRA, KE_S_XF2)
  305. #define K_S_XF3        TERMCAP2KEY(KS_EXTRA, KE_S_XF3)
  306. #define K_S_XF4        TERMCAP2KEY(KS_EXTRA, KE_S_XF4)
  307.  
  308. #define K_S_F1        TERMCAP2KEY(KS_EXTRA, KE_S_F1)    /* shifted func. keys */
  309. #define K_S_F2        TERMCAP2KEY(KS_EXTRA, KE_S_F2)
  310. #define K_S_F3        TERMCAP2KEY(KS_EXTRA, KE_S_F3)
  311. #define K_S_F4        TERMCAP2KEY(KS_EXTRA, KE_S_F4)
  312. #define K_S_F5        TERMCAP2KEY(KS_EXTRA, KE_S_F5)
  313. #define K_S_F6        TERMCAP2KEY(KS_EXTRA, KE_S_F6)
  314. #define K_S_F7        TERMCAP2KEY(KS_EXTRA, KE_S_F7)
  315. #define K_S_F8        TERMCAP2KEY(KS_EXTRA, KE_S_F8)
  316. #define K_S_F9        TERMCAP2KEY(KS_EXTRA, KE_S_F9)
  317. #define K_S_F10        TERMCAP2KEY(KS_EXTRA, KE_S_F10)
  318.  
  319. #define K_S_F11        TERMCAP2KEY(KS_EXTRA, KE_S_F11)
  320. #define K_S_F12        TERMCAP2KEY(KS_EXTRA, KE_S_F12)
  321. #define K_S_F13        TERMCAP2KEY(KS_EXTRA, KE_S_F13)
  322. #define K_S_F14        TERMCAP2KEY(KS_EXTRA, KE_S_F14)
  323. #define K_S_F15        TERMCAP2KEY(KS_EXTRA, KE_S_F15)
  324. #define K_S_F16        TERMCAP2KEY(KS_EXTRA, KE_S_F16)
  325. #define K_S_F17        TERMCAP2KEY(KS_EXTRA, KE_S_F17)
  326. #define K_S_F18        TERMCAP2KEY(KS_EXTRA, KE_S_F18)
  327. #define K_S_F19        TERMCAP2KEY(KS_EXTRA, KE_S_F19)
  328. #define K_S_F20        TERMCAP2KEY(KS_EXTRA, KE_S_F20)
  329.  
  330. #define K_S_F21        TERMCAP2KEY(KS_EXTRA, KE_S_F21)
  331. #define K_S_F22        TERMCAP2KEY(KS_EXTRA, KE_S_F22)
  332. #define K_S_F23        TERMCAP2KEY(KS_EXTRA, KE_S_F23)
  333. #define K_S_F24        TERMCAP2KEY(KS_EXTRA, KE_S_F24)
  334. #define K_S_F25        TERMCAP2KEY(KS_EXTRA, KE_S_F25)
  335. #define K_S_F26        TERMCAP2KEY(KS_EXTRA, KE_S_F26)
  336. #define K_S_F27        TERMCAP2KEY(KS_EXTRA, KE_S_F27)
  337. #define K_S_F28        TERMCAP2KEY(KS_EXTRA, KE_S_F28)
  338. #define K_S_F29        TERMCAP2KEY(KS_EXTRA, KE_S_F29)
  339. #define K_S_F30        TERMCAP2KEY(KS_EXTRA, KE_S_F30)
  340.  
  341. #define K_S_F31        TERMCAP2KEY(KS_EXTRA, KE_S_F31)
  342. #define K_S_F32        TERMCAP2KEY(KS_EXTRA, KE_S_F32)
  343. #define K_S_F33        TERMCAP2KEY(KS_EXTRA, KE_S_F33)
  344. #define K_S_F34        TERMCAP2KEY(KS_EXTRA, KE_S_F34)
  345. #define K_S_F35        TERMCAP2KEY(KS_EXTRA, KE_S_F35)
  346. #define K_S_F36        TERMCAP2KEY(KS_EXTRA, KE_S_F36)
  347. #define K_S_F37        TERMCAP2KEY(KS_EXTRA, KE_S_F37)
  348.  
  349. #define K_HELP        TERMCAP2KEY('%', '1')
  350. #define K_UNDO        TERMCAP2KEY('&', '8')
  351.  
  352. #define K_BS        TERMCAP2KEY('k', 'b')
  353.  
  354. #define K_INS        TERMCAP2KEY('k', 'I')
  355. #define K_KINS        TERMCAP2KEY(KS_EXTRA, KE_KINS)
  356. #define K_DEL        TERMCAP2KEY('k', 'D')
  357. #define K_KDEL        TERMCAP2KEY(KS_EXTRA, KE_KDEL)
  358. #define K_HOME        TERMCAP2KEY('k', 'h')
  359. #define K_KHOME        TERMCAP2KEY('K', '1')    /* keypad home (upper left) */
  360. #define K_XHOME        TERMCAP2KEY(KS_EXTRA, KE_XHOME)
  361. #define K_END        TERMCAP2KEY('@', '7')
  362. #define K_KEND        TERMCAP2KEY('K', '4')    /* keypad end (lower left) */
  363. #define K_XEND        TERMCAP2KEY(KS_EXTRA, KE_XEND)
  364. #define K_PAGEUP    TERMCAP2KEY('k', 'P')
  365. #define K_PAGEDOWN    TERMCAP2KEY('k', 'N')
  366. #define K_KPAGEUP    TERMCAP2KEY('K', '3')    /* keypad pageup (upper R.) */
  367. #define K_KPAGEDOWN    TERMCAP2KEY('K', '5')    /* keypad pagedown (lower R.) */
  368.  
  369. #define K_KPLUS        TERMCAP2KEY('K', '6')    /* keypad plus */
  370. #define K_KMINUS    TERMCAP2KEY('K', '7')    /* keypad minus */
  371. #define K_KDIVIDE    TERMCAP2KEY('K', '8')    /* keypad / */
  372. #define K_KMULTIPLY    TERMCAP2KEY('K', '9')    /* keypad * */
  373. #define K_KENTER    TERMCAP2KEY('K', 'A')    /* keypad Enter */
  374. #define K_KPOINT    TERMCAP2KEY('K', 'B')    /* keypad . */
  375.  
  376. #define K_K0        TERMCAP2KEY('K', 'C')    /* keypad 0 */
  377. #define K_K1        TERMCAP2KEY('K', 'D')    /* keypad 1 */
  378. #define K_K2        TERMCAP2KEY('K', 'E')    /* keypad 2 */
  379. #define K_K3        TERMCAP2KEY('K', 'F')    /* keypad 3 */
  380. #define K_K4        TERMCAP2KEY('K', 'G')    /* keypad 4 */
  381. #define K_K5        TERMCAP2KEY('K', 'H')    /* keypad 5 */
  382. #define K_K6        TERMCAP2KEY('K', 'I')    /* keypad 6 */
  383. #define K_K7        TERMCAP2KEY('K', 'J')    /* keypad 7 */
  384. #define K_K8        TERMCAP2KEY('K', 'K')    /* keypad 8 */
  385. #define K_K9        TERMCAP2KEY('K', 'L')    /* keypad 9 */
  386.  
  387. /*
  388.  * These are used to recognize a keypad key that does have an ASCII equivalent.
  389.  * Since the values are negative, it's the other way around.
  390.  */
  391. #define FIRST_KEYPAD    K_K9
  392. #define LAST_KEYPAD    K_KPLUS
  393.  
  394. #define K_MOUSE        TERMCAP2KEY(KS_MOUSE, KE_FILLER)
  395. #define K_MENU        TERMCAP2KEY(KS_MENU, KE_FILLER)
  396. #define K_VER_SCROLLBAR    TERMCAP2KEY(KS_VER_SCROLLBAR, KE_FILLER)
  397. #define K_HOR_SCROLLBAR   TERMCAP2KEY(KS_HOR_SCROLLBAR, KE_FILLER)
  398.  
  399. #define K_NETTERM_MOUSE    TERMCAP2KEY(KS_NETTERM_MOUSE, KE_FILLER)
  400. #define K_DEC_MOUSE    TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
  401. #define K_JSBTERM_MOUSE    TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
  402. #define K_PTERM_MOUSE    TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
  403.  
  404. #define K_SELECT    TERMCAP2KEY(KS_SELECT, KE_FILLER)
  405. #define K_TEAROFF    TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
  406.  
  407. /*
  408.  * Symbols for pseudo keys which are translated from the real key symbols
  409.  * above.
  410.  */
  411. #define K_LEFTMOUSE    TERMCAP2KEY(KS_EXTRA, KE_LEFTMOUSE)
  412. #define K_LEFTMOUSE_NM    TERMCAP2KEY(KS_EXTRA, KE_LEFTMOUSE_NM)
  413. #define K_LEFTDRAG    TERMCAP2KEY(KS_EXTRA, KE_LEFTDRAG)
  414. #define K_LEFTRELEASE    TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE)
  415. #define K_LEFTRELEASE_NM TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE_NM)
  416. #define K_MIDDLEMOUSE    TERMCAP2KEY(KS_EXTRA, KE_MIDDLEMOUSE)
  417. #define K_MIDDLEDRAG    TERMCAP2KEY(KS_EXTRA, KE_MIDDLEDRAG)
  418. #define K_MIDDLERELEASE    TERMCAP2KEY(KS_EXTRA, KE_MIDDLERELEASE)
  419. #define K_RIGHTMOUSE    TERMCAP2KEY(KS_EXTRA, KE_RIGHTMOUSE)
  420. #define K_RIGHTDRAG    TERMCAP2KEY(KS_EXTRA, KE_RIGHTDRAG)
  421. #define K_RIGHTRELEASE    TERMCAP2KEY(KS_EXTRA, KE_RIGHTRELEASE)
  422.  
  423. #define K_IGNORE    TERMCAP2KEY(KS_EXTRA, KE_IGNORE)
  424.  
  425. #define K_SNIFF        TERMCAP2KEY(KS_EXTRA, KE_SNIFF)
  426.  
  427. #define K_MOUSEDOWN    TERMCAP2KEY(KS_EXTRA, KE_MOUSEDOWN)
  428. #define K_MOUSEUP    TERMCAP2KEY(KS_EXTRA, KE_MOUSEUP)
  429.  
  430. #define K_CSI        TERMCAP2KEY(KS_EXTRA, KE_CSI)
  431. #define K_SNR        TERMCAP2KEY(KS_EXTRA, KE_SNR)
  432. #define K_PLUG        TERMCAP2KEY(KS_EXTRA, KE_PLUG)
  433. #define K_CMDWIN    TERMCAP2KEY(KS_EXTRA, KE_CMDWIN)
  434.  
  435. /* Bits for modifier mask */
  436. /* 0x01 cannot be used, because the modifier must be 0x02 or higher */
  437. #define MOD_MASK_SHIFT        0x02
  438. #define MOD_MASK_CTRL        0x04
  439. #define MOD_MASK_ALT        0x08    /* aka META */
  440. #define MOD_MASK_2CLICK        0x10    /* use MOD_MASK_MULTI_CLICK */
  441. #define MOD_MASK_3CLICK        0x20    /* use MOD_MASK_MULTI_CLICK */
  442. #define MOD_MASK_4CLICK        0x30    /* use MOD_MASK_MULTI_CLICK */
  443. #ifdef MACOS
  444. # define MOD_MASK_CMD         0x80
  445. #endif
  446.  
  447. #define MOD_MASK_MULTI_CLICK    (MOD_MASK_2CLICK|MOD_MASK_3CLICK|MOD_MASK_4CLICK)
  448.  
  449. /*
  450.  * The length of the longest special key name, including modifiers.
  451.  * Current longest is <M-C-S-4-MiddleRelease> (length includes '<' and '>').
  452.  */
  453. #define MAX_KEY_NAME_LEN    23
  454.  
  455. /* Maximum length of a special key event as tokens.  This includes modifiers.
  456.  * The longest event is something like <M-C-S-4-LeftDrag> which would be the
  457.  * following string of tokens:
  458.  *
  459.  * <K_SPECIAL> <KS_MODIFIER> bitmask <K_SPECIAL> <KS_EXTRA> <KT_LEFTDRAG>.
  460.  *
  461.  * This is a total of 6 tokens, and is currently the longest one possible.
  462.  */
  463. #define MAX_KEY_CODE_LEN    6
  464.